use dora_node_api::{MetadataParameters, Parameter};

pub trait MetadataParameterValue<T> {
    fn get_value(&self, key: &str) -> T;
}

impl MetadataParameterValue<i64> for MetadataParameters {
    fn get_value(&self, key: &str) -> i64 {
        match &self.get(key) {
            None => 0,
            Some(parameter) => match parameter {
                Parameter::Bool(_) => 0,
                Parameter::Integer(v) => *v,
                Parameter::String(_) => 0,
            },
        }
    }
}

impl MetadataParameterValue<bool> for MetadataParameters {
    fn get_value(&self, key: &str) -> bool {
        match &self.get(key) {
            None => false,
            Some(parameter) => match parameter {
                Parameter::Bool(v) => *v,
                Parameter::Integer(_) => false,
                Parameter::String(_) => false,
            },
        }
    }
}
